// DataLibrary InterfacePlugin Skin - Common

// 識別子：DL_CMN
// 内容  ：インターフェース用スキンの共有サブルーチン。

//----------------------------------------------------------------------------//
// Plugin
//----------------------------------------------------------------------------//

//-- プラグインの読み込み処理 --//
DL_LoadSkin_Common:
	Local path = DL_FolderPath_Skin()
	If Not Right(path, 1) Like "[\/]" Then
		path = path & "\"  // 末尾に区切り記号がない場合は追加する
	EndIf
	
	// スキン簡易設定ファイルを読み込む
	Require (path & "SkinStyle.eve")
	
	// Libフォルダが指定されている場合は..\を追加する
	If Left(path, 4) = "Lib\" Then
		path = "..\" & path
	EndIf
	
	// 簡易設定サブルーチンを読み込む
	Call DL_SkinStyle path
Return


//-- プラグインの終了処理 --//
DL_UnLoadSkin_Common:
	UnSet DL_Image
	UnSet DL_FontFace
	UnSet DL_FontColor
	UnSet DL_LineColor
	UnSet DL_Background
	UnSet DL_CMN_ActionData
	UnSet DL_CMN_IsChangeFontFace
Return


//----------------------------------------------------------------------------//
// Interface Subroutine
//----------------------------------------------------------------------------//

//-- ClearDisplay : 画面を初期化する --//
DL_CMN_ClearDisplay:
	ClearObj
	Redraw "非同期"
Return


//-- Background : 背景を描画する --//
DL_CMN_Background:
	PaintPicture DL_Image["Background"] 0 0 480 480 "保持"
Return


//-- BackgroundArea x y w h [option] : 背景の一部を描画する --//
DL_CMN_BackgroundArea:
	Incr BaseX Args(1)
	Incr BaseY Args(2)
	
	// 幅と高さを4の倍数に修正する
	Local width = Args(3) - (Args(3) Mod 4)
	Local height = Args(4) - (Args(4) Mod 4)
	Local bg_color = LIndex(Args(5), 1)
	Local bg_percent = LIndex(Args(5), 2)
	
	If bg_color != "" Then
		If bg_percent = "100%" Then
			Line 0 0 (width - 1) (height - 1) BF bg_color
		ElseIf bg_percent = "0%" Then
			PaintPicture DL_Image["Background"] 0 0 width height BaseX BaseY width height "保持"
		Else
			PaintPicture DL_Image["Background"] 0 0 width height BaseX BaseY width height "保持" _
				"フィルタ" bg_color bg_percent
		EndIf
	Else
		PaintPicture DL_Image["Background"] 0 0 width height BaseX BaseY width height "保持"
	EndIf
	
	Incr BaseX (Args(1) * -1)
	Incr BaseY (Args(2) * -1)
Return


//-- DrawString x y strign color_id : 文字列を描画する --//
DL_CMN_DrawString:
	Local px = Args(1)
	Local py = Args(2)
	Local str = Args(3)
	Local color_data = DL_FontColor[IIf(Args(4) != "", Args(4), "Normal")]
	
	// 影を描画する
	Local font_shadow = DL_GetOptionValue("FontShadow", 0)
	If font_shadow >= 1 Then
		Font LIndex(color_data, 2)
		PaintString (px + 1) (py + 1) str
		If font_shadow >= 2 Then
			PaintString (px - 1) (py - 1) str
			PaintString (px + 1) (py - 1) str
			PaintString (px - 1) (py + 1) str
			PaintString px (py - 1) str
			PaintString px (py + 1) str
		EndIf
	EndIf
	
	Font LIndex(color_data, 1)
	PaintString px py str
Return


//-- DrawLine x y w [color] : 横線を描画する --//
DL_CMN_DrawLine:
	Local px = Args(1)
	Local py = Args(2)
	Local width = Args(3)
	Local color_data = IIf(LLength(Args(4)) = 2, Args(4), DL_LineColor["Normal"])
	
	Line px py (px + width) py LIndex(color_data, 1)
	Incr py 1
	Line px py (px + width) py LIndex(color_data, 2)
Return


//-- NowLoading : 読み込み中表示を表示する --//
DL_CMN_NowLoading:	
	Font 40pt "明朝" #ffffff Bold Italic
	Call DL_CMN_BackgroundArea 0 187 480 64 DL_Background["NowLoading"]
	Call DL_CMN_DrawString DL_SCX("Now Loading...", 480) 190 "Now Loading..."
Return


//-- Title string : タイトルを描画する --//
DL_CMN_Title:
	Font 14pt DL_FontFace["Title"] Regular
	Call DL_CMN_Frame 0 10 400 28
	If Args(2) != "" Then
		PaintPicture Args(2) 2 5 32 32 "保持 透過"
		Call DL_CMN_DrawString 37 15 Args(1)
	Else
		Call DL_CMN_DrawString 15 15 Args(1)
	EndIf
Return


//-- Frame x y w h : 汎用フレームを表示する --//
DL_CMN_Frame:
	Local px = Args(1) 
	Local py = Args(2)
	Local width = Args(3)
	Local height = Args(4)
	
	Call DL_CMN_BackgroundArea px py width height DL_Background["Frame"]
	Call DL_CMN_DrawLine px (py + height - 1) width
Return


//-- ListFrame id x y w h string [color_id icon icon_option] : リスト用フレームを表示する --//
DL_CMN_ListFrame:
	Incr BaseX Args(2)
	Incr BaseY Args(3)
	
	Font 11pt DL_FontFace["List"]
	Local str = DL_CutString(Args(6), Args(4) - (15 + 25 * (Args(8) != "")), "...")
	
	Call DL_CMN_Frame 0 0 Args(4) Args(5)
	If Args(8) != "" Then
		PaintPicture Args(8) 0 (0 - (33 - Args(5))) 32 32 Args(9)
		Call DL_CMN_DrawString 37 5 str Args(7)
	Else
		Call DL_CMN_DrawString 10 5 str Args(7)
	EndIf
	
	If Args(1) != "" Then
		Call DL_CMN_HotPoint Args(1) 0 0 Args(4) Args(5) Args(6)
		
		// アクション実行時に必要な情報を記録しておく
		Local data = "(" & str & ") (" & Args(8) & ") (" & Args(9) & ")"
		Set DL_CMN_ActionData[Args(1)] List(BaseX, BaseY, Args(4), Args(5), data)
	EndIf
	
	Incr BaseX (Args(2) * -1)
	Incr BaseY (Args(3) * -1)
Return


//-- ListFrameAction id color_id : リスト用フレームを表示する --//
DL_CMN_ListFrameAction:
	Local data = DL_CMN_ActionData[Args(1)]
	If data = "" Then
		Return
	EndIf
	
	Local base_pos = List(BaseX, BaseY)
	Set BaseX LIndex(data, 1)
	Set BaseY LIndex(data, 2)
	
	Font 11pt DL_FontFace["List"]
//	Call DL_CMN_Frame 0 0 LIndex(data, 3) LIndex(data, 4)
	If LIndex(data, 6) != "" Then
		PaintPicture LIndex(data, 6) 0 (0 - (33 - LIndex(data, 4))) 32 32 LIndex(data, 7)
		Call DL_CMN_DrawString 37 5 LIndex(data, 5) Args(2)
	Else
		Call DL_CMN_DrawString 10 5 LIndex(data, 5) Args(2)
	EndIf
	
	Set BaseX LIndex(base_pos, 1)
	Set BaseY LIndex(base_pos, 2)
Return


//-- ImageButton action_id file x y w h caption color_id : イメージのボタンを設置する --//
DL_CMN_ImageButton:
	Incr BaseX Args(3)
	Incr BaseY Args(4)
	
	Local pic_option
	Switch LCase(Args(8))
	Case 0 "disable"
		pic_option = "暗"
	Case 2 "select"
		pic_option = "明"
	EndSw
	
	PaintPicture Args(2) 0 0 Args(5) Args(6) "透過 保持" pic_option
	
	If (Args(1) != "") And (pic_option != "暗") Then
		Call DL_CMN_HotPoint Args(1) 0 0 Args(5) Args(6) Args(7)
		
		// アクション実行時に必要な情報を記録しておく
		Set DL_CMN_ActionData[Args(1)] List(Args(2), BaseX, BaseY, Args(5), Args(6))
	EndIf
	
	Incr BaseX (Args(3) * -1)
	Incr BaseY (Args(4) * -1)
Return


//-- ImageButtonAction action_id color_id : イメージのボタンを設置する --//
DL_CMN_ImageButtonAction:
	Local data = DL_CMN_ActionData[Args(1)]
	If data = "" Then
		Return
	EndIf
	
	Local pic_option
	Switch LCase(Args(2))
	Case 0 "disable"
		pic_option = "暗"
	Case 2 "select"
		pic_option = "明"
	EndSw
	
	PaintPicture LIndex(data, 1) LIndex(data, 2) LIndex(data, 3) LIndex(data, 4) LIndex(data, 5) _
		"透過 保持" pic_option
Return


//-- PageControll x y scroll_id : ページ操作ボタンを設置する --//
DL_CMN_PageControll:
	Incr BaseX Args(1)
	Incr BaseY Args(2)
	
	Local scroll_id = "Scroll " & Args(3) & " "
	Local scroll_data = DL_GetScrollData(Args(3), "ScrollData", 2)
	Local is_prev = DL_GetScrollData(Args(3), "IsPrev")
	Local is_next = DL_GetScrollData(Args(3), "IsNext")
	
	// 現在の表示位置情報を表示する
	Font 11pt DL_FontFace["Number"]
	Local string_x = 38 + DL_SCX(scroll_data, 72)
	Call DL_CMN_Frame 38 3 72 28
	Call DL_CMN_DrawString string_x 9 scroll_data
	
	// 直接入力のホットポイントを設置する
	If is_prev Or is_next Then
		Call DL_CMN_HotPoint (scroll_id & "Input") 38 3 64 28 "直接入力する"
		Set DL_CMN_ActionData[scroll_id & "Input"] List(BaseX + string_x, BaseY + 9, "(" & scroll_data & ")")
	EndIf
	
	// ページ操作ボタンを設置する
	Call DL_CMN_ImageButton (scroll_id & "-1") DL_Image["ArrowLeft"] 0 0 32 32 "前のページへ" is_prev
	Call DL_CMN_ImageButton (scroll_id & "+1") DL_Image["ArrowRight"] 116 0 32 32 "次のページへ" is_next
	
	Incr BaseX (Args(1) * -1)
	Incr BaseY (Args(2) * -1)
Return


//-- PageControllAction action_id color_id : ページ操作ボタンを設置する --//
DL_CMN_PageControllAciton:
	Local data = DL_CMN_ActionData[Args(1)]
	If data = "" Then
		Return
	EndIf
	
	If LIndex(Args(1), 3) = "Input" Then
		Font 11pt DL_FontFace["Number"]
		Call DL_CMN_DrawString LIndex(data, 1) LIndex(data, 2) LIndex(data, 3) Args(2)
	Else
		Call DL_CMN_ImageButtonAction Args(1) Args(2)
	EndIf
Return


//----------------------------------------------------------------------------//
// Subroutine
//----------------------------------------------------------------------------//

//-- SetDrawOption option : FontとDrawOptionを同時に設定する --//
DL_CMN_SetDrawOption:
	Switch Args(1)
	Case "保持" "背景" "通常"
		DrawOption Args(1)
		Font Args(1)
	EndSw
Return


//-- ChangeFontFace interface : 個別フォントを適用する --//
DL_CMN_ChangeFontFace:
	If IsVarDefined(DL_CMN_IsChangeFontFace) Then
		Return
	EndIf
	Set DL_CMN_IsChangeFontFace 1
	
	Local interface = Args(1)
	Call DL_SwapVariable "DL_FontFace[Title]" ("DL_FontFace[" & interface & "Title]")
	Call DL_SwapVariable "DL_FontFace[List]" ("DL_FontFace[" & interface & "List]")
	Call DL_SwapVariable "DL_FontFace[Text]" ("DL_FontFace[" & interface & "Text]")
	Call DL_SwapVariable "DL_FontFace[Number]" ("DL_FontFace[" & interface & "Number]")
Return


//-- ClearFontFace interface : 個別フォントを解除する --//
DL_CMN_ClearFontFace:
	If Not IsVarDefined(DL_CMN_IsChangeFontFace) Then
		Return
	EndIf
	UnSet DL_CMN_IsChangeFontFace
	
	Local interface = Args(1)
	Call DL_SwapVariable "DL_FontFace[Title]" ("DL_FontFace[" & interface & "Title]")
	Call DL_SwapVariable "DL_FontFace[List]" ("DL_FontFace[" & interface & "List]")
	Call DL_SwapVariable "DL_FontFace[Text]" ("DL_FontFace[" & interface & "Text]")
	Call DL_SwapVariable "DL_FontFace[Number]" ("DL_FontFace[" & interface & "Number]")
Return


